package com.koocloud.electroplatemanage.utils;


import com.koocloud.electroplatemanage.Exception.CompaireException;
import freemarker.core.JSONOutputFormat;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;

public class DoubleUtil {
     /** 
     * double 相加 
     * @param d1 
     * @param d2 
     * @return 
     */ 
    public static double sum(String d1,String d2){
        BigDecimal bd1 = new BigDecimal(d1); 
        BigDecimal bd2 = new BigDecimal(d2); 
        return bd1.add(bd2).doubleValue(); 
    }

    /**
     * 判断输入的五个操作人顺序是否通过  true通过 false不通过
     * @param operatorOne
     * @param operatorTwo
     * @param operatorThree
     * @param operatorFour
     * @param operatorFive
     * @return
     * @throws CompaireException
     */
    public static Boolean FiveOperateOrderCompare(String operatorOne,String d1,String operatorTwo,String d2,String operatorThree,String d3,String operatorFour,String d4,String operatorFive,String d5)  {
        //对于当前操作人为空的情况下，下级的操作人不能输入
        if (StringUtils.isEmpty(operatorTwo)){
            if (!StringUtils.isEmpty(operatorThree) || !StringUtils.isEmpty(operatorFour) || !StringUtils.isEmpty(operatorFive)){
                return false;
            }
        }
        if (StringUtils.isEmpty(operatorThree)){
            if (!StringUtils.isEmpty(operatorFour) || !StringUtils.isEmpty(operatorFive)){
                return false;
            }
        }
        if (StringUtils.isEmpty(operatorFour)){
            if (!StringUtils.isEmpty(operatorFive)){
                return false;
            }
        }
        //级联判断 操作人与分配的操作人比例
        if (StringUtils.isEmpty(operatorTwo) || StringUtils.isEmpty(d2)){
            if (!StringUtils.isEmpty(operatorThree) || !StringUtils.isEmpty(d3) || !StringUtils.isEmpty(operatorFour) || !StringUtils.isEmpty(d4) || !StringUtils.isEmpty(operatorFive) || !StringUtils.isEmpty(d5)){
                return false;
            }
        }
        if (StringUtils.isEmpty(operatorThree) || StringUtils.isEmpty(d3)){
            if (!StringUtils.isEmpty(operatorFour) || !StringUtils.isEmpty(d4) || !StringUtils.isEmpty(operatorFive) || !StringUtils.isEmpty(d5)){
                return false;
            }
        }
        if (StringUtils.isEmpty(operatorFour) || StringUtils.isEmpty(d4)){
            if (!StringUtils.isEmpty(operatorFive) || !StringUtils.isEmpty(d5) ){
                return false;
            }
        }
        //对最后一个进行判断  两项要有都有  要没有都没有
        if (!StringUtils.isEmpty(operatorTwo)){
            if (StringUtils.isEmpty(d2)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(d2)){
            if (StringUtils.isEmpty(operatorTwo)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(operatorThree)){
            if (StringUtils.isEmpty(d3)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(d3)){
            if (StringUtils.isEmpty(operatorThree)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(operatorFour)){
            if (StringUtils.isEmpty(d4)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(d4)){
            if (StringUtils.isEmpty(operatorFour)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(operatorFive)){
            if (StringUtils.isEmpty(d5)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(d5)){
            if (StringUtils.isEmpty(operatorFive)){
                return false;
            }
        }

        return true;
    }


    /**
     *  五个数据进行相加  判断是否为1.0
     * @param d1
     * @param d2
     * @return
     */
    public static Boolean FiveNumSum(String d1,String d2,String d3,String d4,String d5) throws CompaireException {
        BigDecimal zero = new BigDecimal("0");
        BigDecimal bd1 = new BigDecimal("0");
        if (!StringUtils.isEmpty(d1)){
             bd1 = new BigDecimal(d1);
        }
        BigDecimal bd2= new BigDecimal("0");
        if (!StringUtils.isEmpty(d2)){
             bd2 = new BigDecimal(d2);
        }
        BigDecimal bd3= new BigDecimal("0");
        if (!StringUtils.isEmpty(d3)){
            bd3 = new BigDecimal(d3);
        }
        BigDecimal bd4= new BigDecimal("0");
        if (!StringUtils.isEmpty(d4)){
            bd4 = new BigDecimal(d4);
        }
        BigDecimal bd5= new BigDecimal("0");
        if (!StringUtils.isEmpty(d5)){
            bd5 = new BigDecimal(d5);
        }
        if (bd2.compareTo(zero)!=0 && bd2.compareTo(bd1)==1){
            throw  new CompaireException("操作人2分配的比例比操作人1分配的比例大，请重新分配");
        }
        if (bd3.compareTo(zero)!=0 && bd3.compareTo(bd2)==1){
            throw  new CompaireException("操作人3分配的比例比操作人2分配的比例大，请重新分配");
        }
        if (bd4.compareTo(zero)!=0 &&bd4.compareTo(bd3)==1){
            throw  new CompaireException("操作人4分配的比例比操作人3分配的比例大，请重新分配");
        }
        if (bd5.compareTo(zero)!=0 &&bd5.compareTo(bd4)==1){
            throw  new CompaireException("操作人5分配的比例比操作人4分配的比例大，请重新分配");
        }

        BigDecimal totaolNum = bd1.add(bd2).add(bd3).add(bd4).add(bd5);
        BigDecimal bd= new BigDecimal("1");
        int i = bd.compareTo(totaolNum);
        if (i==0){
            return true;
        }else {
            return  false;
        }
    }


    /**
     * 判断输入的五个操作人是否有相同的  true相同 false不同
     * @param operatorOne
     * @param operatorTwo
     * @param operatorThree
     * @param operatorFour
     * @param operatorFive
     * @return
     * @throws CompaireException
     */
    public static Boolean FiveOperateCompare(String operatorOne,String operatorTwo,String operatorThree,String operatorFour,String operatorFive)  {
        //对于操作人传空值  只有不为空的时候才会进行比对
        if (!StringUtils.isEmpty(operatorTwo)){
           if (operatorOne.equals(operatorTwo)){
               return false;
           }
        }
        if (!StringUtils.isEmpty(operatorThree)){
            if (operatorThree.equals(operatorTwo) || operatorThree.equals(operatorOne)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(operatorFour)){
            if (operatorFour.equals(operatorThree) || operatorFour.equals(operatorTwo) || operatorFour.equals(operatorOne)){
                return false;
            }
        }
        if (!StringUtils.isEmpty(operatorFive)){
            if (operatorFive.equals(operatorFour) || operatorFive.equals(operatorThree) || operatorFive.equals(operatorTwo) || operatorFive.equals(operatorOne)){
                return false;
            }
        }
            return true;
    }


    public static void main(String[] args) {
//        Boolean s = null;
//        try {
//            s = FiveNumSum("0.6", "0.3", "0.1", "0", "0");
//
//        } catch (CompaireException e) {
//
//            System.out.println(e.getMessage());
//        }
//
//        System.out.println("s:"+s);
//        Boolean flag = FiveOperateCompare("x","z","","z","");
//        System.out.println("是否名字都不同："+flag);

        Boolean aBoolean = FiveOperateOrderCompare("a","1","b","","c","3","d","4","e","3");
        System.out.println("判断校验是否通过："+aBoolean);
    }


    /** 
     * double 相减 
     * @param d1 
     * @param d2 
     * @return 
     */ 
    public static double sub(double d1,double d2){ 
        BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
        BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
        return bd1.subtract(bd2).doubleValue(); 
    } 

    /** 
     * double 乘法 
     * @param d1 
     * @param d2 
     * @return 
     */ 
    public static double mul(double d1,double d2){ 
        BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
        BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
        return bd1.multiply(bd2).doubleValue(); 
    } 


    /** 
     * double 除法 
     * @param d1 
     * @param d2 
     * @param scale 四舍五入 小数点位数 
     * @return 
     */ 
    public static double div(double d1,double d2,int scale){ 
        //  当然在此之前，你要判断分母是否为0，    
        //  为0你可以根据实际需求做相应的处理 
        BigDecimal bd1 = new BigDecimal(Double.toString(d1)); 
        BigDecimal bd2 = new BigDecimal(Double.toString(d2)); 
        return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); 
    } 

    /**
     * double 转 string 去掉后面锝0
     * @param i
     * @return
     */
    public static String getString(double i){
        String s = String.valueOf(i);
        if(s.indexOf(".") > 0){
         //正则表达
               s = s.replaceAll("0+?$", "");//去掉后面无用的零
               s = s.replaceAll("[.]$", "");//如小数点后面全是零则去掉小数点
         }
        return s;
    }


    /**
     * 数字转换为千位符
     * @param number
     * @return
     */
    public static String numberToBits(String number){
        String begin="";
        String end="";
        String[] num=number.split("\\.");
        if(num.length>1){
            begin=num[0];
            end=num[1];
        }else{
            begin=number;
        }
        return begin.replaceAll("(?<=\\d)(?=(?:\\d{3})+$)", ",")+"."+end;
    }


}